linux/x86-64: force _PAGE_NX on the 1:1 mapping (matching native)
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Thu, 24 May 2007 14:12:31 +0000 (15:12 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Thu, 24 May 2007 14:12:31 +0000 (15:12 +0100)
Signed-off-by: Jan Beulich <jbeulich@novell.com>
linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c

index 55fcd37af5298b0d7d8faeb2ae6b7452aeaca294..acef5ea378afd053c823ebaed6182bfd0d3e33f4 100644 (file)
@@ -479,18 +479,15 @@ phys_pmd_init(pmd_t *pmd, unsigned long address, unsigned long end)
                pte = alloc_static_page(&pte_phys);
                pte_save = pte;
                for (k = 0; k < PTRS_PER_PTE; pte++, k++, address += PTE_SIZE) {
+                       unsigned long pteval = address | _PAGE_NX | _KERNPG_TABLE;
+
                        if ((address >= end) ||
                            ((address >> PAGE_SHIFT) >=
-                            xen_start_info->nr_pages)) { 
-                               __set_pte(pte, __pte(0)); 
-                               continue;
-                       }
-                       if (make_readonly(address)) {
-                               __set_pte(pte, 
-                                         __pte(address | (_KERNPG_TABLE & ~_PAGE_RW)));
-                               continue;
-                       }
-                       __set_pte(pte, __pte(address | _KERNPG_TABLE));
+                            xen_start_info->nr_pages))
+                               pteval = 0;
+                       else if (make_readonly(address))
+                               pteval &= ~_PAGE_RW;
+                       __set_pte(pte, __pte(pteval & __supported_pte_mask));
                }
                pte = pte_save;
                early_make_page_readonly(pte, XENFEAT_writable_page_tables);